package com.bobo.utis;

import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeMap;

import org.junit.Test;

public class RK8 {
	
	@Test
	public void test1() {
		 String str = "HTTP Server（简称Apache）是Apache软件基金会的一个开放源码的网页服务器，可以在大多数计算机操作系统中运行，由于其多平台和安全性被广泛使用，是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩展，将Perl/Python等解释器编译到服务器中。 [2] \r\n"
					+ "Apache HTTP服务器是一个模块化的服务器，源于NCSAhttpd服务器，经过多次修改，成为世界使用排名第一的Web服务器软件。\r\n"
					+ "它可以运行在几乎所有广泛使用的计算机平台上。\r\n"
					+ "Apache源于NCSAhttpd服务器，经过多次修改，成为世界上最流行的Web服务器软件之一。Apache取自“a patchy server”的读音，意思是充满补丁的服务器，因为它是自由软件，所以不断有人来为它开发新的功能、新的特性、修改原来的缺陷。Apache的特点是简单、速度快、性能稳定，并可做代理服务器来使用。\r\n"
					+ "本来它只用于小型或试验Internet网络，后来逐步扩充到各种Unix系统中，尤其对Linux的支持相当完美。Apache有多种产品，可以支持SSL技术，支持多个虚拟主机。Apache是以进程为基础的结构，进程要比线程消耗更多的系统开支，不太适合于多处理器环境，因此，在一个Apache Web站点扩容时，通常是增加服务器或扩充群集节点而不是增加处理器。到目前为止Apache仍然是世界上用的最多的Web服务器，市场占有率达60%左右。世界上很多著名的网站如Amazon、Yahoo!、W3 Consortium、Financial Times等都是Apache的产物，它的成功之处主要在于它的源代码开放、有一支开放的开发队伍、支持跨平台的应用（可以运行在几乎所有的Unix、Windows、Linux系统平台上）以及它的可移植性等方面。\r\n"
					+ "Apache的诞生极富有戏剧性。当NCSAWWW服务器项目停顿后，那些使用NCSAWWW服务器的人们开始交换他们用于该服务器的补丁程序，他们也很快认识到成立管理这些补丁程序的论坛是必要的。就这样，诞生了Apache Group，后来这个团体在NCSA的基础上创建了Apache。";

		// 1、自定义一个结构，利用合适的集合类统计字符出现的次数（ 结构定义合理10分，拆分字符10分，统计10分）。

		HashMap<Character, Integer> map = new HashMap<Character, Integer>();
		for (int i = 0; i < str.length(); i++) {
			char key = str.charAt(i);
			// 判断是否包含
			if (map.containsKey(key)) {
				// 获取该key
				Integer count = map.get(key);
				map.put(key, count + 1);

			} else {// 没有
				map.put(key, 1);
			}

		}

		/// 2、至少使用两种遍历方式打印每个字母出现的次数（每个遍历方式20分）。
		//方法1
		for (Entry<Character, Integer> entry : map.entrySet()) {
			System.out.println(entry.getKey() + "：" + entry.getValue());
		}
        //方法2
		Set<Character> set = map.keySet();
		for (Character key : set) {
			System.out.println(key+":"+map.get(key));
		}
		
		
		// 3、统计每个单词出现的次数。然后遍历打印（拆分正确10分，遍历10分，统计结果正确10分）。
		String[] lineWords = str.split("\\W+");
		HashMap<String, Integer> hashMap = new HashMap<String, Integer>();
		for (int i = 0; i < lineWords.length; i++) {
            
			if (hashMap.containsKey(lineWords[i])) {
				// 获取该key
				Integer count = hashMap.get(lineWords[i]);
				hashMap.put(lineWords[i], count + 1);

			} else {// 没有
				hashMap.put(lineWords[i], 1);
			}
		}
		
		//遍历
		System.out.println("单词===========");
		   Set<String> keySet = hashMap.keySet();
		   for (String key : keySet) {
			System.out.println(key+":"+hashMap.get(key));
		}
		// 4、打印出现次数超过3次的单词（大小写不敏感）（敏感处理10分，3次的判断10分）。
		 System.out.println("忽略大小写 且超过三次的");
		 Map<String, Integer> treeMap = new TreeMap<String, Integer>(String.CASE_INSENSITIVE_ORDER);
			for (int i = 0; i < lineWords.length; i++) {
				
				if (treeMap.containsKey(lineWords[i])) {
					// 获取该key
					Integer count = treeMap.get(lineWords[i]);
					treeMap.put(lineWords[i], count + 1);

				} else {// 没有
					treeMap.put(lineWords[i], 1);
				}
			}
			
			for (Map.Entry<String, Integer> et : treeMap.entrySet()) {
				if(et.getValue()>3)
				System.out.println("map输出：--" + et.getKey() + "----" + et.getValue());
			}
	}
}
